#pragma once

#include <boost/describe.hpp>

#include <algorithm/analytical_model/ModelPara.h>
#include <utils/HasValue.h>
#include <utils/ParaUtils.h>

// TODO: 取一个正式的名字
namespace solar
{
    class UNIZARPara2 : public ModelPara
    {
        public:
            virtual ~UNIZARPara2() = default;
            UNIZARPara2() = default;
            void setPara(const std::string& property_type, const std::any& value) override;
            [[nodiscard]] auto getPara(const std::string& property_type) -> std::any override;
#include <utils/class_name.inc>
        private:
            double sigma_x_ = kUndefined;
            double sigma_y_ = kUndefined;
            double flux_param_ = kUndefined;
            double x3_ = kUndefined; // 右上
            double x0_ = kUndefined; // 左上
            double y1_ = kUndefined; // 左下
            double y0_ = kUndefined; // 左上
            BOOST_DESCRIBE_CLASS(UNIZARPara2, (ModelPara), (), (),
                                 (sigma_x_, sigma_y_, flux_param_, x3_, x0_, y1_, y0_))
    };
} // namespace solar

#define CURRENT_CLASS_NAME UNIZARPara2
#include <utils/class_describe_header.inc>
SOLAR_DESCRIBE_CLASS(UNIZARPara2, (ModelPara), (), (),
                     (sigma_x_, sigma_y_, flux_param_, x3_, x0_, y1_, y0_))
